# 조인의 종류
# 조인
정의
조인이란 하나의 테이블이 아닌 두개 이상의 테이블을 묶어서 하나의 결과물을 만드는 것을 말합니다.
- MySQL에서는 JOIN 이라는 쿼리로, MongoDB에서는 lookup 이라는 쿼리로 이를 처리할 수 있습니다.
- MongoDB의 lookup 연산은 되도록 사용하지 말아야 하는데, MongoDB는 조인 연산에 대해 관계형 데이터베이스보다 성능이 떨어집니다.
- 따라서 여러 테이블을 조인하는 작업이 많을 경우 MongoDB보다는 관계형 데이터베이스를 써야합니다.
# 내부조인 INNER JOIN
정의
왼쪽 테이블과 오른쪽 테이블의 두행이 모두 일치하는 행이 있는 부분만 표기합니다.
- 내부 조인은 두 테이블 간 교집합을 나타냅니다.
- ON 절과 함께 사용되며, ON의 조건을 만족하는 데이터만 가져옵니다.
- 표준 SQL과는 달리 MySQL에서는 JOIN, INNER JOIN, CROSS JOIN이 모두 같은 의미로 사용됩니다.
명시적인 내부 조인
SELECT *
FROM A_TABLE
INNER JOIN B_TABLE
ON 조건
암시적인 내부 조인
SELECT *
FROM A_TABLE, B_TABLE
WHERE A_TABLE.id = B_TABLE.id;
# 왼쪽 조인 LEFT OUTER JOIN
정의
왼쪽 테이블의 모든 행이 결과 테이블에 표기됩니다.
- 만약 오른쪽 테이블에 일치하는 항목이 없으면 해당 값은 null 값이 됩니다.
SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE
ON 조건
WHERE 조건
# 오른쪽 조인 RIGHT OUTER JOIN
정의
오른쪽 테이블의 모든 행이결과 테이블에 표기됩니다.
- 만약 왼쪽 테이블에 일치하는 항목이 없으면 해당 값은 null 값이 됩니다.
SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE
ON 조건
WHERE 조건
# 합집합 조인 FULL OUTER JOIN
정의
두 개의 테이블을 기반으로 조인 조건에 만족하지 않는 행까지 모두 표기합니다.
- 이때 일치하는 항목이 없으면 누락된 쪽에 null 값이 포함되어 출력됩니다.
SELECT *
FROM A_TABLE
FULL OUTER JOIN B_TABLE
ON 조건
WHERE 조건
- MySQL에서는 FULL JOIN을 지원하지 않기에 다음과 같이 사용해야 합니다.
SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE
ON 조건
UNION
SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE
ON 조건
# UNION
- 중복되지 않은 유일한 값을 추출하는 경우 or 중복되는 모든 값까지 추출하는 경우에 쓰인다.
# UNION
- 중복되지 않은 유일한 값을 추출
SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE
UNION
SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE
# UNION ALL
- 중복되는 모든 값 추출
SELECT *
FROM A_TABLE
LEFT JOIN B_TABLE
UNION ALL
SELECT *
FROM A_TABLE
RIGHT JOIN B_TABLE
# CROSS JOIN
정의
Cartesian Product(카디션 곱)이라고도 하며 조인되는 두 테이블에서 곱집합을 반환합니다.
- m열을 가진 테이블과 n열을 가진 테이블이 교차 조인되면 m*n 개의 열을 생성합니다.
SELECT *
FROM A_TABLE
CROSS JOIN B_TABLE;